<?php
class Delivery_Model_Mapper_PromocionesPedido
	extends Delivery_Model_Mapper_Abstract
{
	public function getDbTable()
	{
		return parent::getDbTable( 'PromocionesPedidos' );
	}
	
	public function save ( $promocion, $actualizarStock = false, $vendido = true )
	{
		
		$dbTable= $this->getDbTAble();
		
//		Zend_Debug::dump( $promocion->productos );
		
		$dbTable->guardar( $promocion );		
		
		if ( $actualizarStock ){
			
			$mapper = Delivery_Model_Factory::mapper( 'Productos' );
			
			$productos = $mapper->getByIds( array_keys($promocion->productos));
			
			foreach ($productos as $producto){
				
				if ( $vendido ){
					$producto->cantidadDisponible -= ($promocion->cantidad * $promocion->productos[$producto->idProducto]);
					$producto->cantidadVendida += ($promocion->cantidad * $promocion->productos[$producto->idProducto]);
				} else {
					$producto->cantidadDisponible += ($promocion->cantidad * $promocion->productos[$producto->idProducto]);
					$producto->cantidadVendida -= ($promocion->cantidad * $promocion->productos[$producto->idProducto]);
				}
//				$producto->guardar();
				$mapper->save( $producto, false );
			}
		}
	}
	
	public function getById( $idPromocion )
	{
		if ( $this->getIdentityMap()->isRegistered( 'Delivery_Model_PromocionPedida', $idPromocion )){
			return $this->getIdentityMap()->get( 'Delivery_Model_PromocionPedida', $idPromocion );
		}
		
		$dbTable= $this->getDbTAble();
		$row = $dbTable->getById( $idPromocion );
		
		if( !empty($row)){
			return $this->_fetch( $row );
		}
	}
	
	public function getByParentId( $idPromocion )
	{
		$mapper = Delivery_Model_Factory::mapper('Promociones');
		$promocion = $mapper->getById( $idPromocion );
		
		return $this->_fetch( get_object_vars($promocion));
	}
	
	public function getByPedido( $idPedido )
	{
		$dbTable= $this->getDbTAble();
		
		return $this->_fetchCollection(
			'PromocionesPedido',
			$dbTable->getByPedido( $idPedido )
		);
	}
	
	public function inAnyOrder( $idPromocion )
	{
		$rowset = $this->getById( $idPromocion );		
		
		return empty($rowset) ? false : true;
	}
	
	public function hasProduct( $idProducto )
	{
		$dbTable= $this->getDbTAble();
		return $dbTable->hasProduct( $idProducto );		
	}
	
	public function loadNegocio( $promociones )
	{
		$mapper = Delivery_Model_Factory::mapper('Promociones');
		
		$mapper->loadNegocio( $promociones );
	}
	
//	public function loadProductos( $promociones )
//	{
//		$mapper = Delivery_Model_Factory::mapper('ProductosPedido');
//		
//		Delivery_Model_DbTable_Desactivable::onlyActive( false );
//		
//		if ( $promociones instanceof Delivery_Model_Collection_Promociones && count($promociones)){
//		
//			foreach ( $promociones as $promocion){
//				
//				if( empty($promocion->productos)){
//					continue;
//				}
//				
//				$productos = $mapper->getByParentIds( array_keys($promocion->productos) );
//				$mapper->loadCategoria( $productos );
//				
//				
//				foreach (array_keys($promocion->productos) as $idProducto){
//					$productos[$idProducto]->cantidad = $promocion->productos[$idProducto];
//				}
//				
//				$promocion->setProductos( $productos);
//			}
//		}
//		
//	 	elseif ( $promociones instanceof Delivery_Model_Promocion){
//	 		
//	 		if( ! empty($promociones->productos)){
//	 			
//	 			$productos = $mapper->getByParentIds( array_keys($promociones->productos) );
//	 			$mapper->loadCategoria( $productos );
//	 			
//	 			foreach (array_keys($promociones->productos) as $idProducto){
//					$productos[$idProducto]->cantidad = $promociones->productos[$idProducto];
//				}
//			}
//		}
//		
//		Delivery_Model_DbTable_Desactivable::onlyActive();
//	}
	
    public function loadProductosPedidos( $promociones )
	{
		$mapper = Delivery_Model_Factory::mapper('ProductosPedido');
		
		Delivery_Model_DbTable_Desactivable::onlyActive( false );
		
		if ( $promociones instanceof Delivery_Model_Collection_Promociones && count($promociones)){
		
			foreach ( $promociones as $promocion){
				
				if( empty($promocion->productos)){
					continue;
				}
				
				$productos = $mapper->getByParentIds( array_keys($promocion->productos) );
				$mapper->loadCategoria( $productos );
				
				
				foreach (array_keys($promocion->productos) as $idProducto){
					$productos[$idProducto]->cantidad = $promocion->productos[$idProducto];
				}
				
				$promocion->setProductosPedidos( $productos);
			}
		}
		
	 	elseif ( $promociones instanceof Delivery_Model_Promocion){
	 		
	 		if( ! empty($promociones->productos)){
	 			
	 			$productos = $mapper->getByParentIds( array_keys($promociones->productos) );
	 			$mapper->loadCategoria( $productos );
	 			
	 			foreach (array_keys($promociones->productos) as $idProducto){
					$productos[$idProducto]->cantidad = $promociones->productos[$idProducto];
				}
				
				$promocion->setProductosPedidos( $productos);
			}
		}
		
		Delivery_Model_DbTable_Desactivable::onlyActive();
	}
	
	
	/**
	 * @param array
	 * @return object Delivery_Model_ProductoPedido
	 */
	protected function _fetch( $row )
	{
		$promocion = new Delivery_Model_PromocionPedida( $row );
		
		$this->getIdentityMap()->set( $promocion, $promocion->getId() );
		
		return $promocion;
	}
	
}